package ifrn.agendaweb.controlador;

import ifrn.agendaweb.modelo.Usuario;
import ifrn.agendaweb.modelo.validador.UsuarioValidador;
import ifrn.agendaweb.servico.ServicoException;
import ifrn.agendaweb.servico.UsuarioServico;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/usuario/**")
public class UsuarioControlador {

	private UsuarioServico usuarioServico;
	@Autowired
	public void setUsuarioServico(UsuarioServico usuarioServico) {
		this.usuarioServico = usuarioServico;
	}

	/*validador*/
	@Autowired
    private UsuarioValidador usuarioValidador;
 
	@InitBinder
	protected void initBinder(WebDataBinder binder) {
		binder.setValidator(new UsuarioValidador());
	}


	@RequestMapping("/index")
	public String cadastro(Model modelo) {
		modelo.addAttribute("usuario", new Usuario());
		return "usuario/formulario";
	}

	@RequestMapping("/usuario")
	public String exibir(Model modelo) {
		Usuario usuario = new Usuario();
		usuario.setId(1);
		try {
			modelo.addAttribute("usuario", usuarioServico.recuperarUsuario(usuario));
		} catch (Exception pex) {
			modelo.addAttribute("erro", pex.getMessage());
		}

		return "usuario/dados";
	}


	@RequestMapping(value="/criar", method=RequestMethod.POST)
	public String create(@Valid Usuario usuario, BindingResult result, Model modelo){

		//verifica se os campos dos formulários são válidos
		if (!result.hasFieldErrors()) {

			ModelAndView m = new ModelAndView();
			m.addObject("usuario", usuario);

			try {
				//cria o usuario
				this.usuarioServico.criar(usuario);
				
			} //se ocorrer alguma exceção
			catch (ServicoException e) {
				//envia a mensagem de erro
				modelo.addAttribute("erro", e.getMessage());
				return "usuario/formulario";
			}
			
			return "usuario/dados";

		} else {
			return "usuario/formulario";
		}
		
	}

}
